/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controlador;

import Beans.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author USUARIO
 */
public class ServletPasajes1 extends HttpServlet {

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String accion = request.getParameter("accion");
        String origen = request.getParameter("ori");
        String destino = request.getParameter("des");
        String tipPas = request.getParameter("pTipPas");
        String fecIda = request.getParameter("fecIda");
        String[] dias={"domingo","lunes","martes", "miercoles","jueves","viernes","sabado"};
        HttpSession sesion = request.getSession();
        try {
            /*if(accion.equals("showIti"))
            {   ArrayList<ModIti_Servicios> list;
                ArrayList<ModIti_Servicios> listv;
                if(sesion.getAttribute("sesBoletos") != null && sesion.getAttribute("sesBoletosV") != null)
                {   list = (ArrayList<ModIti_Servicios>)sesion.getAttribute("sesBoletos");
                    listv = (ArrayList<ModIti_Servicios>)sesion.getAttribute("sesBoletosV");
                } else
                {   list = new ArrayList<ModIti_Servicios>();
                    listv = new ArrayList<ModIti_Servicios>();
                }
                if(tipPas.equals("Ida"))
                {
                    ModIti_Ruta r = new ModIti_Ruta().obtenerIdRutaByOriDest(origen, destino);
                    ModIti_Servicios s = new ModIti_Servicios();
                    list = s.listarServiciosByIdRuta(r.getId());
                    sesion.setAttribute("sesBoletos", list);
                    response.sendRedirect("modulos/pasajes/pasajesPaso1.jsp");
                } else
                {   ModIti_Ruta rv = new ModIti_Ruta();
                    ModIti_Ruta rv1 = new ModIti_Ruta();
                    rv = rv1.obtenerIdRutaByOriDest(destino, origen);
                    ModIti_Servicios s = new ModIti_Servicios();
                    list = s.listarServiciosByIdRuta(rv.getId());
                    sesion.setAttribute("sesBoletosV", listv);
                    response.sendRedirect("modulos/pasajes/pasajesPaso1.jsp");
                }
            }*/
            if(accion.equals("showIti"))
            {   boolean rg = new ModIti_RangoDisponibilidad().validarRango(fecIda);
                if(rg)
                {   if(tipPas.equals("Ida"))
                    {   try
                        {   /*DateFormat formato = new SimpleDateFormat("dd/mm/YYYYY");
                            Date date;
                            date = formato.parse(fecIda);                    
                            Calendar cal = Calendar.getInstance();
                            cal.setTime(date);
                            r.setDuracion(cal);*/
                            ModIti_RangoDisponibilidad rgd = new ModIti_RangoDisponibilidad().obtenerRango(fecIda);
                            /* SE OBTIENE EL ID RANGO DE DISPONIBILIDAD DE LA FECHA Y EL ID DEL DIA DE BUSQUEDA */
                            ModIti_Programacion pr = new ModIti_Programacion().obtenerProgramacionPorFecha(rgd.getId());
                            DateFormat formato = new SimpleDateFormat("dd/mm/YYYY");
                            Date date;
                            date = formato.parse(fecIda);
                            Calendar cal = Calendar.getInstance();
                            cal.setTime(date);
                            int numeroDia = cal.get(Calendar.DAY_OF_WEEK);
                            String dia = dias[numeroDia-1];
                            boolean esta = new ModIti_Dias().estaProgramacionEnDias(dia, pr.getIdprogramacion());//OK - Funciona
                            if(esta)
                            {   ModIti_Ruta r = new ModIti_Ruta().obtenerIdRutaByOriDest(origen, destino);
                                ArrayList<ModIti_Servicios> list = new ModIti_Servicios().listarServiciosByIdRuta(r.getId());
                                if(list.isEmpty())
                                {   out.printf("<div class=\"col-xs-12\" style=\"margin-top:25px;\">");
                                    out.printf("<div class=\"alert alert-info alert-dismissable\">");
                                    out.printf("<i class=\"fa fa-info\"></i>");
                                    out.printf("<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times</button>");
                                    out.printf("<b>Mensaje!&nbsp; No se encuentra itinerario para ese origen y destino</b>");
                                    out.printf("</div>");
                                    out.printf("</div>");
                                } else
                                {   out.printf("<table id=\"example1\" class=\"table table-bordered table-striped\">");
                                    out.printf("<thead>");
                                    out.printf("<tr>");
                                    out.printf("<th></th>");
                                    out.printf("<th>Hora sal.</th>");
                                    out.printf("<th>Servicio</th>");
                                    ArrayList<ModVeh_TipoDeBus> listar = new ModVeh_TipoDeBus().listarTipoDeBus();
                                    for(int x=0; x<listar.size(); x++)
                                    {   out.printf("<th align=\"center\" valign=\"middle\" class=\"bg-navy pad\">"+listar.get(x).getNombre()+"</th>");
                                    }
                                    out.printf("</tr>");
                                    out.printf("</thead>");
                                    out.printf("<tbody>");
                                    /*Despliegue de los servicios disponibles*/
                                    for(int i=0; i<list.size(); i++)
                                    {   String h = null;
                                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
                                        ArrayList<ModIti_Itinerario> lis = new ModIti_Itinerario().listarItinerariosByIdServicios(list.get(i).getId());
                                        for(int j=0; j<lis.size(); j++)
                                        {       
                                            out.printf("<tr>");                                
                                            out.printf("<td align=\"center\" valign=\"middle\"><input type=\"radio\" name=\"idIti\" class=\"minimal\"/></td>");
                                            h = sdf.format(lis.get(j).getHorasalida().getTime());
                                            out.printf("<td>"+h+"</td>");
                                            out.printf("<td>"+list.get(i).getNombre()+"</td>");
                                            out.printf("<td>Precio - Disponible - Lleg. aprox.</td>");
                                            out.printf("<td></td>");
                                            out.printf("<td></td>"); 
                                            out.printf("<td></td>");          
                                            out.printf("</tr>");
                                        }                        
                                    }                            
                                    out.printf("</tbody>");                            
                                    out.println("</table>");
                                } 
                            } else
                            {   out.printf("<div class=\"col-xs-12\" style=\"margin-top:25px;\">");
                                out.printf("<div class=\"alert alert-info alert-dismissable\">");
                                out.printf("<i class=\"fa fa-info\"></i>");
                                out.printf("<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times</button>");
                                out.printf("<b>Mensaje!&nbsp; No se programó itinerario para esa fecha de viaje</b>");
                                out.printf("</div>");
                                out.printf("</div>");
                            }

                        } catch (ParseException ex)
                        { 
                        }                         
                    } else
                    {   /* LOGICA DE PROGRAMACIÓN PARA IDA Y VUELTA*/
                    }                                    
                } else 
                {   out.printf("<div class=\"col-xs-12\" style=\"margin-top:25px;\">");
                    out.printf("<div class=\"alert alert-info alert-dismissable\">");
                    out.printf("<i class=\"fa fa-info\"></i>");
                    out.printf("<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times</button>");
                    out.printf("<b>Mensaje!&nbsp; No se existe programación de itinerario para esa fecha de viaje</b>");
                    out.printf("</div>");
                    out.printf("</div>");
                }
            }
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
